
// rafThrottle 的作用是通过 requestAnimationFrame 来限制函数的执行频率，确保在
// 浏览器的每一帧中最多只执行一次 fn。这在处理高频事件（如鼠标移动、窗口缩放等
// ）时非常有用，可以避免过度的函数调用导致的性能问题。
function rafThrottle(fn: Function) {
  let lock = false;
  return function (this: any, ...args: any[]) {
    if (lock) return;
    lock = true;
    window.requestAnimationFrame(() => {
      fn.apply(this, args);
      lock = false;
    });
  };
}

function debounce(fn: Function, delay: number = 300) {
  let timer: number | null = null;
  return function (this: any, ...args: any[]) {
    timer && clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

export { rafThrottle, debounce };
